如何无需Webdriver立即执行即可存储WebElement或对应Xpath表达式?
实现方案
你当前写法的问题是调用driver.FindElement时会立即执行元素查找逻辑,返回的是已经查找到的IWebElement对象,而非定位规则本身。FindElement是WebDriver实例的成员方法,脱离driver实例调用自然会触发上下文不存在该方法的报错。
要实现「先存定位规则、后续需要时再查找元素」的需求,直接存储By类型的定位器即可,不会触发任何查找操作:
// 仅存储XPath定位规则,不会执行元素查找 By ResetBtnLocator = By.XPath("//button[text()='Reset']"); By ExeBtnLocator = By.XPath("//button[text()='Exe']");
后续在if else分支需要使用元素时,再调用driver.FindElement传入对应定位器执行查找:
if (/*你需要触发查找的判断条件*/) { var ResetBtn = driver.FindElement(ResetBtnLocator); // 执行元素操作,比如点击 ResetBtn.Click(); } else { var ExeBtn = driver.FindElement(ExeBtnLocator); ExeBtn.Click(); }
如果需要避免元素未加载导致的报错,也可以配合显式等待使用:
using OpenQA.Selenium.Support.UI; // 显式等待最长10秒,直到重置按钮可点击 var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10)); var clickableResetBtn = wait.Until(d => d.FindElement(ResetBtnLocator).Displayed && d.FindElement(ResetBtnLocator).Enabled); clickableResetBtn.Click();
内容的提问来源于stack exchange,提问作者Tester
相关产品推荐
相关产品推荐

