我想检查id某些元素是否与selenium一起显示,当你尝试找到某些元素时购买:
val editInvoiceString = driver.findElement(By.xpath( """//*[@id="edit_invoice"]/div[2]/div/div[10]/div[5]/div[1]"""))
editInvoiceString
if (editInvoiceString.isDisplayed)
do something
如果元素不在页面上,程序将崩溃。
它已经在分配中崩溃了,因为那里有一个findElement并且没有找到元素
如何在不崩溃的情况下检查它是否显示?
答案 0 :(得分:0)
只需处理NoSuchElementException
:
try {
val editInvoiceString = driver.findElement(By.xpath( """//*[@id="edit_invoice"]/div[2]/div/div[10]/div[5]/div[1]"""));
println("element found");
// check the displayedness
}
catch {
case e: NoSuchElementException => println("no such element");
}
答案 1 :(得分:0)
如果您使用driver.find
代替driver.findElement
,则会返回Option
,然后您可以在其上调用isDefined
以验证是否找到该元素。
您使用的是WebBrowser
吗?
答案 2 :(得分:0)
你可以通过以下方式实现它:
public bool IsElementPresent(By by, IWebDriver driver)
{
try
{
driver.FindElement(by);
return true;
}
catch (NoSuchElementException)
{
return false;
}
}
public bool IsElementPresent(By by, IWebDriver driver, int sec)
{
bool itemExist = false;
itemExist = IsElementPresent(by, driver);
while (!itemExist && sec >= 0)
{
thread.Sleep(1);
itemExist = IsElementPresent(by, driver);
sec--;
}
if (sec == -1)
return false;
else
return true;
}
呼叫:
if(IsElementPresent(By.xpath("""//*[@id="edit_invoice"]/div[2]/div/div[10]/div[5]/div[1]"""),driver,5))
{
//case exist
}
else
{
// case not exist
}
答案 3 :(得分:0)
如果使用Wait类(扩展FluentWait)忽略异常,则不需要使用try-catch子句:
Wait wait = new FluentWait(driver)
.withTimeout(30, SECONDS)
.pollingEvery(5, SECONDS)
.ignoring(NoSuchElementException.class);
WebElement foo = wait.until(ExpectedConditions.presenceOfElementLocated(
By.xpath(".//*[@id="edit_invoice"]/div[2]/div/div[10]/div[5]/div[1]"))
);
答案 4 :(得分:0)
使用findElements而不是FindElement。
这将返回找到的WebElements列表。如果未找到任何元素,则列表将为空。它看起来像这样(注意我不是Scala人,所以下面的语法可能稍微不正确。)
val editInvoiceString = driver.findElements(By.xpath( """//*[@id="edit_invoice"]/div[2]/div/div[10]/div[5]/div[1]"""))
if (editInvoiceString size > 0)
do something