Java I';m获取NoTouchElement异常错误
我已经分享了下面的代码,请让我知道更正Java I';m获取NoTouchElement异常错误,java,selenium,testing,selenium-webdriver,nosuchelementexception,Java,Selenium,Testing,Selenium Webdriver,Nosuchelementexception,我已经分享了下面的代码,请让我知道更正 import org.openqa.selenium.By; import org.openqa.selenium.ie.InternetExplorerDriver; public class MyClass { public static void main(String[] args) throws InterruptedException { // TODO Auto-generated method stub
import org.openqa.selenium.By;
import org.openqa.selenium.ie.InternetExplorerDriver;
public class MyClass {
public static void main(String[] args) throws InterruptedException {
// TODO Auto-generated method stub
/*System.setProperty("webdriver.ie.driver","D:\\Backup\\Documents\\Automation\\drivers\\IEDriverServer.exe");
InternetExplorerDriver driver = new InternetExplorerDriver();
driver.get("https://www.google.com");
WebDriverWait driverWait = new WebDriverWait(driver,50);
driverWait.until(ExpectedConditions.elementToBeClickable(By.xpath("//*[@id='lst-ib']"))).click();
driver.findElementByXPath("//*[@id='lst-ib']").sendKeys("Make My Trip");
driver.findElementById("_fZl").click();
driverWait.until(ExpectedConditions.elementToBeClickable(By.linkText("MakeMyTrip, India's No 1 Travel Site | Book Hotels, Flights, Holiday ..."))).click();
Screenshot S1 = new Screenshot();
S1.Takescreen();*/
String username = null;
String password = null;
MyClass C1 = new MyClass();
C1.URLs(username, password);
}
public void URLs (String username, String password) throws InterruptedException
{
System.setProperty("webdriver.ie.driver","D:\\Backup\\Documents\\Automation\\drivers\\IEDriverServer.exe");
InternetExplorerDriver driver = new InternetExplorerDriver();
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
driver.get("https://google.com");
driver.findElement(By.className("lst lst-tbb sbibps")).sendKeys("irctc");
driver.findElement(By.id("_fZl")).click();
Thread.sleep(10000);
driver.findElement(By.linkText("IRCTC Next Generation eTicketing System")).click();
username = driver.findElement(By.id("usernameId")).getTagName();
password = driver.findElement(By.className("loginPassword")).getTagName();
System.out.println(username);
System.out.println(password);
}
}
错误:
线程“main”org.openqa.selenium.NoSuchElementException中的异常:
找不到类名=lst lst tbb sbibps的元素(警告:
服务器未提供任何stacktrace(跟踪信息)命令
持续时间或超时:10.45秒
lst lst tbb sbibps实际上是3个不同的类。要使用所有这些选项,您可以使用cssSelector
driver.findElement(By.cssSelector(".lst.lst-tbb.sbibps")).sendKeys("irctc");
使用className
只能使用一个类,尽管它们看起来都不是唯一的
driver.findElement(By.className("lst")).sendKeys("irctc");
// or
driver.findElement(By.className("lst-tbb")).sendKeys("irctc");
// or
river.findElement(By.className("sbibps")).sendKeys("irctc");
在Google.com中,通常有三个输入标签可供搜索,但其中两个具有hidden=true属性
<div id="gs_sc0" class="gsfi" style="background: transparent none repeat scroll 0% 0%; color: transparent; padding: 0px; position: absolute; z-index: 2; white-space: pre; visibility: hidden;"/>
<input id="gs_taif0" class="gsfi" disabled="" autocomplete="off" aria-**hidden="true"** style="border: medium none; padding: 0px; margin: 0px; height: auto; width: 100%; position: absolute; z-index: 1; background-color: transparent; color: silver; left: 0px; visibility: hidden;" dir="ltr"/>
<input id="gs_htif0" class="gsfi" disabled="" autocomplete="off" aria-hidden="true" style="border: medium none; padding: 0px; margin: 0px; height: auto; width: 100%; position: absolute; z-index: 1; background-color: transparent; color: silver; transition: all 0.218s ease 0s; opacity: 0; text-align: left; left: 0px;" dir="ltr"/>
正如@Guy指出的,您试图访问3个不同的类,因此不能对所有类使用By.className方法
我认为Guy的方法是正确的,但只有当您的用例与Guy所理解的完全一样时,它才会起作用
您的用例是什么?
是否要访问属于classlst
、lst tbb
或sbibps
或
是否要访问所有3类的所有元素lst
、lst tbb
或sbibps
或
是否要访问属于sbibps
类的所有元素,该类元素是lst tbb
的子类,它是lst
的子类(即.lst.lst tbb.sbibps
)
解决
对于第一个用例,这应该足够了(参见)
driver.findElements(由.cssSelector(“.lst、.lst tbb、.sbibps”);
对于第二个用例,我发现了这一点(参见)
driver.findElements(By.xpath(“//*[@class='lst-lst-tbb-sbibps]”);
或者这个,如果你不知道它是否有更多的类
driver.findElements(By.xpath(“/*[contains(@class,'lst-lst-tbb-sbibps')]);
对于最后一个用例,这应该有效(归功于@Guy)
driver.findElements(By.cssSelector(“.lst.lst tbb.sbibps”);
注意!我使用了findElement
方法,而不是findElement
方法,它会生成一个列表,并且不会引发异常,如果不满足条件,则列表只是空的
此外:
请参阅以获取参考尝试以下代码
driver.get("http://google.com");
driver.manage().window().maximize();
driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
driver.findElement(By.id("lst-ib")).sendKeys("irctc");
WebDriverWait wait = new WebDriverWait(driver, 5); //use explicit wait method for 5 seconds until element not found.
wait.until(ExpectedConditions.elementToBeClickable(driver.findElement(By.xpath("//a[text()='IRCTC Next Generation eTicketing System']"))));
driver.findElement(By.xpath("//a[text()='IRCTC Next Generation eTicketing System']")).click();
WebDriverWait homepage = new WebDriverWait(driver, 5); //use explicit wait method for 5 seconds until element not found. Because when click on link button page is getting loading so wait for few seconds.
homepage.until(ExpectedConditions.elementToBeClickable(driver.findElement(By.id("usernameId"))));
driver.findElement(By.id("usernameId")).sendKeys("Username");
driver.findElement(By.xpath("//input[@class='loginPassword'][@type='password']")).sendKeys("XXXXX");
注意:-不要使用Thread.sleep()
,而是使用显式等待
方法。使用以下方法:
driver.findElement(By.name("q")).sendKeys("irctc");
请使用下面的代码,希望它能工作
driver.findElement(By.className("gsfi")).sendKeys("irctc");
尝试下面的代码,它将在您的情况下工作(我在我的机器上测试了它)
让我知道它是否适用于您。感谢您的回复,我尝试了cssselector,但仍然无法找到元素异常,我还尝试了按“Id”查找元素正如你提到的,没有什么能帮我找到element@GSelenium您正在尝试键入搜索框吗?如果您的问题已解决,请将此答案标记为已接受。
driver.findElement(By.className("gsfi")).sendKeys("irctc");
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.ie.InternetExplorerDriver;
public class MyClass {
public static void main(String[] args) throws InterruptedException {
String username = null;
String password = null;
MyClass C1 = new MyClass();
C1.URLs(username, password);
}
public void URLs (String username, String password) throws InterruptedException
{
System.setProperty("webdriver.ie.driver","D:\\Backup\\Documents\\Automation\\drivers\\IEDriverServer.exe");
InternetExplorerDriver driver = new InternetExplorerDriver();
InternetExplorerDriver driver = new InternetExplorerDriver();
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
driver.get("https://google.com");
driver.findElement(By.id("lst-ib")).sendKeys("irctc");
driver.findElement(By.id("_fZl")).click();
Thread.sleep(10000);
driver.findElement(By.linkText("IRCTC Next Generation eTicketing System")).click();
username = driver.findElement(By.id("usernameId")).getTagName();
password = driver.findElement(By.className("loginPassword")).getTagName();
System.out.println(username);
System.out.println(password);
}
}