gpt4 book ai didi

java - 在 Selenium Webdriver 中显式等待 findElements

转载 作者:行者123 更新时间:2023-12-03 13:33:18 31 4
gpt4 key购买 nike

登录后,页面重定向到一个页面(我想等待页面加载),在那里我通过 tagName 查找元素,

By inputArea = By.tagName("input");
List <WebElement> myIput = driver.findElements(inputArea);

在这里,我想为 findElements 提供显式等待,我想等待它的所有可见性或存在性。我的网页中只有两个输入。如果我给 Implicit Wait 很长时间,代码就会工作。但它会有所不同。所以我决定给显式等待,我怎么能显式等待 findElements?。或者我如何检查列表中第二个的可见性(List myIput)。即,myIput.get(1)。当我像下面这样给出visibilityOfAllElements() 时,它会抛出错误。
WebDriverWait waitForFormLabel = new WebDriverWait(driver, 30);      
By inputArea = By.tagName("input");
List <WebElement> myIput = driver.findElements(inputArea);
waitForFormLabel.until(ExpectedConditions.visibilityOfAllElements(myIput));
myIput.get(1).sendKeys("Test");

这是我在自动化程序中使用的代码列表。
package mapap;
import java.util.ArrayList;
import java.util.List;

import lib.ReadExcellData;
import lib.WriteExcellData;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.Select;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;

import com.relevantcodes.extentreports.ExtentReports;
import com.relevantcodes.extentreports.ExtentTest;
import com.relevantcodes.extentreports.LogStatus;

public class EditForm {
public static WebDriver driver;
static String excelName = "D:\\xlsx\\map2.xlsx";
ReadExcellData readData = new ReadExcellData(excelName);
WriteExcellData writeData = new WriteExcellData(excelName);
String baseUrl = readData.getExcellData("base", 0, 0);
By colRadio;
ExtentReports report;
ExtentTest logger;

@BeforeClass
public void browserOpen() throws Exception{

report = new ExtentReports("D:\\driver\\extentRepo\\Edit Map Forms.html", true);
logger = report.startTest("Map Forms Automation Testing", "Adding Forms");

driver = new FirefoxDriver();
driver.get(baseUrl);
String username = readData.getExcellData("user", 1, 0);
String password = readData.getExcellData("user", 1, 1);
WebDriverWait waitForUserName = new WebDriverWait(driver, 250);
By usernameField = By.name("username");
waitForUserName.until(ExpectedConditions.elementToBeClickable(usernameField)).sendKeys(username);
driver.findElement(By.name("password")).sendKeys(password);
driver.findElement(By.xpath("//input[contains(@src,'/images/signin.png')]")).click();

}

@Test(priority = 1)
public void addingForm() throws Exception{
driver.navigate().to(baseUrl+"/anglr/form-builder/dist/#/forms");
driver.manage().window().maximize();
WebDriverWait waitForFormLabel = new WebDriverWait(driver, 30);
By inputArea = By.tagName("input");
List <WebElement> myIput = driver.findElements(inputArea);
waitForFormLabel.until(ExpectedConditions.visibilityOfAllElements(myIput));
myIput.get(1).sendKeys("Test");


}

}

请注意:如果我在代码“driver.navigate().to(baseUrl+"/anglr/form-b​​uilder/dist/#/forms");”之后给了Thread.sleep很长时间,我将获得所有WebElements。但我想避免这种情况,我只想等待 WebElements 加载 ()。

任何人请帮忙。

最佳答案

你可以这样做:

//explicit wait for input field field
WebDriverWait wait = new WebDriverWait(driver, 10);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.tagName("input")));
ExpectedConditions 类在很多情况下都很有用,它提供了一些预定义的条件来等待元素。这里是其中的一些:
  • alertIsPresent : 存在警报
  • elementSelectionStateToBe :元素状态是选择。
  • elementToBeClickable :元素存在且可点击。
  • elementToBeSelected : 元素被选中
  • frameToBeAvailableAndSwitchToIt : 框架可用且框架已选择。
  • invisibilityOfElementLocated : 元素不可见
  • presenceOfAllElementsLocatedBy : 当前元素位于。
  • textToBePresentInElement : 出现在特定元素上的文本
  • textToBePresentInElementValue :和特定元素的元素值。
  • visibilityOf : 一个可见的元素。
  • titleContains : 标题包含
  • 关于java - 在 Selenium Webdriver 中显式等待 findElements,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34397608/

    31 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com