Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Selenium webdriver 为什么此代码显示错误,而按钮位于“通过代码”字段的右侧?_Selenium Webdriver_Xpath_Automated Tests_Katalon Studio - Fatal编程技术网

Selenium webdriver 为什么此代码显示错误,而按钮位于“通过代码”字段的右侧?

Selenium webdriver 为什么此代码显示错误,而按钮位于“通过代码”字段的右侧?,selenium-webdriver,xpath,automated-tests,katalon-studio,Selenium Webdriver,Xpath,Automated Tests,Katalon Studio,我试着找到按钮,然后按下面给出的代码点击。我使用的其他方法也会在代码底部进行注释 错误说明代码末尾的Submit按钮无法按代码定位。 当按钮能够定位并单击时,为什么会显示这些错误?请帮助我找到解决方案 WebElement unfield =driver.findElement(By.xpath("//input[@id='user-name']")); Actions actions = new Actions(driver); actions.moveToElement(unf

我试着找到按钮,然后按下面给出的代码点击。我使用的其他方法也会在代码底部进行注释

错误说明代码末尾的Submit按钮无法按代码定位。 当按钮能够定位并单击时,为什么会显示这些错误?请帮助我找到解决方案

WebElement unfield =driver.findElement(By.xpath("//input[@id='user-name']"));       
Actions actions = new Actions(driver);
actions.moveToElement(unfield).click();     
unfield.clear();
unfield.sendKeys("test");      
driver.findElement(By.xpath("//input[@id='user-password']")).clear();
driver.findElement(By.xpath("//input[@id='user-password']")).sendKeys("test");
WebElement test = driver.findElement(By.xpath("(.//*[normalize-space(text()) and normalize-space(.)='SIGN IN'])[1]/following::button[1]"));
Actions actions_signinclick = new Actions(driver);
actions_signinclick .moveToElement(test).click().build().perform();
//this will display in next page
WebDriverWait wait = new WebDriverWait(driver, 10);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[@id='user-passcode']")));    
driver.findElement(By.xpath("//*[@id='user-passcode']")).click();                                                                                       
driver.findElement(By.xpath("//*[@id='user-passcode']")).clear();
driver.findElement(By.xpath("//*[@id='user-passcode']")).sendKeys("1234");      
WebDriverWait submit_button = new WebDriverWait(driver, 60);
submit_button.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//BUTTON[@_ngcontent-wks-c3=''][text()='SUBMIT']/self::BUTTON")));          
driver.findElement(By.xpath("//BUTTON[@_ngcontent-wks-c3=''][text()='SUBMIT']/self::BUTTON")).click();

    /*WebElement test1 = driver.findElement(By.xpath("//BUTTON[@_ngcontent-wks-c3=''][text()='SUBMIT']/self::BUTTON"));
    Actions actions_submitclick = new Actions(driver);
    actions_submitclick .moveToElement(test1).click().build().perform();*/
错误显示如下:

org.openqa.selenium.TimeoutException:预期条件失败:等待位于by.xpath://BUTTON[@_-ngcontent-wks-c3=''][text()='SUBMIT']/self::BUTTON的元素的可见性(每隔500毫秒尝试60秒) 位于org.openqa.selenium.support.ui.WebDriverWait.timeoutException(WebDriverWait.java:81)

如果你在寻找上面两行的区别

在第一行中,visibility of ElementLocated用于检查DOM上是否存在元素,以及是否存在可见性。要检查可见性,请确保元素的高度和宽度大于0。 在您的例子中,可能元素存在于DOM中,但不可见,因此您将得到异常。

在第二行中,您只需单击DOM上的元素,就可以传递它

如果你在寻找上面两行的区别

在第一行中,visibility of ElementLocated用于检查DOM上是否存在元素,以及是否存在可见性。要检查可见性,请确保元素的高度和宽度大于0。 在您的例子中,可能元素存在于DOM中,但不可见,因此您将得到异常。


在第二行中,您只需单击DOM上的元素,就可以传递它

谢谢你的回复。我也参考了你的链接。但是当我试图直接定位它(driver.findelelement(By.xpath…)时,它不起作用,它还会抛出一条错误消息,说“找不到元素”。这就是我尝试上面的注释代码的原因。是否有办法解决此问题?您使用的是哪种浏览器?您尝试过css吗?您的xpath在浏览时计算是否正确?xpath中有一个错误,我已经重写了它并尝试了代码,现在运行良好。再次感谢您。作为业内资深人士,如果你可以在这里添加一些建议>谢谢你的回复。我也参考了你的链接。但是当我试图直接定位它时,它不起作用(driver.findelelement(By.xpath…),它还抛出一条错误消息说“找不到元素”。这就是我尝试上面的注释代码的原因。是否有办法解决此问题?您使用的是哪种浏览器?您尝试过css吗?您的xpath在浏览时计算是否正确?xpath中有一个错误,我已经重写了它并尝试了代码,现在运行良好。再次感谢您。作为业内资深人士,如果您可以在此处添加一些建议>
submit_button.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//BUTTON[@_ngcontent-wks-c3=''][text()='SUBMIT']/self::BUTTON")));          
driver.findElement(By.xpath("//BUTTON[@_ngcontent-wks-c3=''][text()='SUBMIT']/self::BUTTON")).click();