selenium网络自动化中元素不可交互异常

在下面的代码中,我无法在密码字段中发送密码密钥,我尝试单击该字段,清除该字段并发送密钥。但是现在可以使用任何一种方法。但是如果我调试和测试它的工作

  public class TestMail {

protected static WebDriver driver;

protected static String result;

@BeforeClass

public static void setup() {

System.setProperty("webdriver.gecko.driver","D:\\geckodriver.exe");

driver = new FirefoxDriver();

driver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS);

}

@Test

void Testcase1() {

driver.get("http://mail.google.com");

WebElement loginfield = driver.findElement(By.name("Email"));

if(loginfield.isDisplayed()){

loginfield.sendKeys("ragesh@gmail.in");

}

else{

WebElement newloginfield = driver.findElemnt(By.cssSelector("#identifierId"));

newloginfield.sendKeys("ragesh@gmail.in");

// System.out.println("This is new login");

}

driver.findElement(By.name("signIn")).click();

// driver.findElement(By.cssSelector(".RveJvd")).click();

driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);

// WebElement pwd = driver.findElement(By.name("Passwd"));

WebElement pwd = driver.findElement(By.cssSelector("#Passwd"));

pwd.click();

pwd.clear();

// pwd.sendKeys("123");

if(pwd.isEnabled()){

pwd.sendKeys("123");

}

else{

System.out.println("Not Enabled");

}

回答:

尝试将隐式等待时间设置为大约10秒。

gmail.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

或设置一个明确的等待。显式等待是您定义的代码,用于等待特定条件发生后再继续执行代码。您的情况就是密码输入字段的可见性。(感谢ainlolcat的评论)

WebDriver gmail= new ChromeDriver();

gmail.get("https://www.gmail.co.in");

gmail.findElement(By.id("Email")).sendKeys("abcd");

gmail.findElement(By.id("next")).click();

WebDriverWait wait = new WebDriverWait(gmail, 10);

WebElement element = wait.until(

ExpectedConditions.visibilityOfElementLocated(By.id("Passwd")));

gmail.findElement(By.id("Passwd")).sendKeys("xyz");

:硒无法找到该元素的原因是因为密码输入字段的ID最初是隐藏的密码。单击“下一步”按钮后,Google首先验证输入的电子邮件地址,然后显示密码输入字段(将ID从“隐藏密码”更改为“密码”)。因此,当密码字段仍处于隐藏状态(即Google仍在验证电子邮件ID)时,您的网络驱动程序将开始搜索ID为Passwd且仍处于隐藏状态的密码输入字段。因此,将引发异常。

以上是 selenium网络自动化中元素不可交互异常 的全部内容, 来源链接: utcz.com/qa/430224.html

回到顶部