我想通过链接验证标志

问题描述 投票:0回答:1

我需要我的代码从第 4 帧切换到第 5 帧,单击链接,并验证徽标是否存在。

我的代码能够从第 4 帧切换到第 5 帧并单击链接,但无法验证徽标。

// frame4
WebElement frame4 = driver.findElement(By.xpath("//frame[@src='frame_4.html']"));
driver.switchTo().frame(frame4);
driver.findElement(By.xpath("//input[@name='mytext4']")).sendKeys("Assignment");
driver.switchTo().defaultContent();
    
// switch to frame5
WebElement frame5 = driver.findElement(By.xpath("//frame[@src='frame_5.html']"));
driver.switchTo().frame(frame5);
driver.findElement(By.xpath("//input[@name='mytext5']")).sendKeys("frames");
driver.findElement(By.xpath("/html/body/center/a")).click();
boolean b = driver.findElement(By.xpath("//img[@alt='UI Vision by a9t9 software - Image-Driven Automation']")).isDisplayed();
if(b)
{
    System.out.println("Present");
}
else
{
    System.out.println("not ");
}
java selenium-webdriver
1个回答
0
投票

方法

.isDisplayed()
旨在检查已存在的元素是否可见。我的猜测是,有时图像不存在或者您的定位器不正确,并且当您尝试查找元素时代码会抛出异常。首先,您需要确保该元素存在,然后检查它是否可见。为此,您可以使用该模式,

List<WebElement> e = driver.findElements(...);
if (e.isEmpty()) {
    // element does not exist
} else {
    // element does exist
}

一些反馈...

  1. 我在您的代码中添加了一些

    WebDriverWait
    。当您要查找的元素并不总是立即可用时,您应该使用它们。它将使您的脚本执行更加一致。

  2. 随着我添加的等待,我使用了

    ExpectedConditions.frameToBeAvailableAndSwitchToIt()
    。这会等待 IFRAME 存在,然后切换到它。

  3. 如果

    .isDisplayed()
    返回
    true
    ,则意味着该元素是可见的,而不是在打印到控制台时“存在”。 Selenium 术语中的 Present 意味着元素存在于 DOM 中,而不是可见。我在您的打印声明中更正了这一点。

  4. 我通过打印结果

    Boolean
    简化了打印语句,而不是使用
    if
    语句来打印不同的字符串。


将上述模式和反馈合并到您的代码中,

// frame4
WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10));
wait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.xpath("//frame[@src='frame_4.html']")));
driver.findElement(By.xpath("//input[@name='mytext4']")).sendKeys("Assignment");
driver.switchTo().defaultContent();
    
// switch to frame5
wait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.xpath("//frame[@src='frame_5.html']")));
driver.findElement(By.xpath("//input[@name='mytext5']")).sendKeys("frames");
driver.findElement(By.xpath("/html/body/center/a")).click();
List<WebElement> image = driver.findElements(By.xpath("//img[@alt='UI Vision by a9t9 software - Image-Driven Automation']"));
Boolean visible = !image.isEmpty() && image.get(0).isDisplayed();
System.out.println("Visible: " + visible);
© www.soinside.com 2019 - 2024. All rights reserved.