使用selenium webdriver和C#,当我尝试使用下面的代码查找元素并且defaultLocationID
在1-9
范围内(即单个数字)时,它会失败。
但是,如果defaultLocationID
为10
或更高(即多位数),则成功。
_webDriver.FindElement(By.XPath("//input[@value='" + defaultLocationID + "']")).Click();
除了确保ID
是10还是以上之外,有没有人经历过这种情况并想出一个解决方法?
我想找的元素是:
<li><input type="checkbox" value="2"> LocationName</li>
为了回应Würgspaß的回答,我尝试了以下内容:
WebDriverWait wait = new WebDriverWait(_webDriver, TimeSpan.FromSeconds(20));
IWebElement element = wait.Until(ExpectedConditions.ElementIsVisible(By.XPath("//input[@value='2']")));
_webDriver.FindElement(By.XPath("//input[@value='2']")).Click();
commonFunctions.ClickButtonOrLink(_webDriver, "save-btn");
这失败了:
OpenQA.Selenium.WebDriverTimeoutException : Timed out after 20 seconds
还尝试了:
WebDriverWait wait = new WebDriverWait(_webDriver, TimeSpan.FromSeconds(20));
IWebElement myDynamicElement = wait.Until<IWebElement>((d) =>
{
return d.FindElement(By.XPath("//input[@value='2']"));
});
_webDriver.FindElement(By.XPath("//input[@value='2']")).Click();
commonFunctions.ClickButtonOrLink(_webDriver, "save-btn");
此失败并出现与以前相同的错误。
用11替换值都成功通过。
答案 0 :(得分:0)
请参阅Selenium文档,了解如何使用explicit waits。
等待元素可点击的Java方式是这样的(在C#中它应该是类似的):
//30s timeout, use timeout not sleep
WebDriverWait wait = new WebDriverWait(driver, 30);
By xpath = By.xpath("//input[@value='" + defaultLocationID + "']");
//wait for element to be clickable, then click
WebElement element = wait.until(ExpectedConditions.elementToBeClickable(xpath));
或者等待可见性:
WebElement element = wait.until(ExpectedConditions.visibilityOfElementLocated(xpath));
如果看不到,请不要使用它。