在尝试在Java中执行Selenium的以下代码时,我收到此错误“指针操作的缺少或无效的类型参数”。
public static void main(String args[]) throws InterruptedException
{
WebDriver driver = new FirefoxDriver();
driver.get("https://www.flipkart.com/");
driver.findElement(By.xpath(".//*[@class='_3Ji-EC']/li[8]/a")).click();
WebElement elem = driver.findElement(By.className("_2zrpKA"));
elem.sendKeys("ABC");
WebElement elem2 = driver.findElement(By.xpath(".//*[@class='_2zrpKA
_3v41xv']"));
elem2.sendKeys("XYZ");
driver.findElement(By.xpath(".//*[@class='_2AkmmA _1LctnI
_7UHT_c']")).click();
System.out.println("Success");
//driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
Thread.sleep(5000);
WebElement elem3 = driver.findElement(By.xpath(".//*[@class='_3Ji-
EC']/li[7]/a"));
System.out.println("success");
Actions action = new Actions(driver);
action.moveToElement(elem3).build().perform();
driver.findElement(By.xpath(".//*[@class='_1u5ANM']/li[9]/a")).click();
}
我尝试使用Selenium 3.4.0和Firefox 51.x,52.x,53.x以及最新的geckodriver 16.1和16.0。 当我使用Firefox 53.x时,我收到错误“预期[对象未定义]未定义为字符串”否则每次我收到错误“指针操作的缺失或无效类型参数”。
在上面的代码中,我能够第二次打印“成功”而没有任何问题,但之后我收到了错误。
答案 0 :(得分:0)
以下是您的问题的解决方案:
与Selenium 3.4.0
一起使用geckodriver v0.16.1
& Mozilla Firefox 53.x您需要在代码中指定geckodriver
的绝对路径:
System.setProperty("webdriver.gecko.driver", "C:\\your_directory\\geckodriver.exe");
你的xpath似乎很容易受我影响。您可能希望构建更独特的逻辑xpath。要点击Log In
按钮,您可以执行以下操作:
driver.findElement(By.xpath("//div[@class='AsXM8z']/ul/li/a[@class='_2k0gmP'][text()='Log In']")).click();
我建议你不要只依赖于类,添加更多属性。 Enter Email
字段的xpath可以是:
WebElement elem = driver.findElement(By.xpath("//input[@class='_2zrpKA']"));
Enter Password
的xpath不是唯一的,您可能希望将其更改为:
WebElement elem2 = driver.findElement(By.xpath("//input[@class='_2zrpKA _3v41xv']"));
Login
按钮的xpath必须是唯一的,如下所示:
driver.findElement(By.xpath("//button[@class='_2AkmmA _1LctnI _7UHT_c']")).click();
避免使用Thread.sleep(5000);
而是使用ImplicitlyWait
或ExplicitWait
点击用户名的xpath再次易受攻击,您可能希望将其更改为:
WebElement elem3 = driver.findElement(By.xpath("//div[@class='AsXM8z']/ul/li/a[@class='_1AHrFc _2k0gmP']"));
点击Log Out
按钮的xpath再次易受攻击,您可能希望将其更改为:
driver.findElement(By.xpath("//div[@class='_1H5F__']/div/ul/li/ul/li/a[@class='_2k0gmP'][text()='Log Out']")).click();
这是您自己的工作代码块,有一些简单的调整;
System.setProperty("webdriver.gecko.driver", "C:\\your_directory\\geckodriver.exe");
WebDriver driver = new FirefoxDriver();
driver.get("https://www.flipkart.com/");
driver.findElement(By.xpath("//div[@class='AsXM8z']/ul/li/a[@class='_2k0gmP'][text()='Log In']")).click();
//Email
WebElement elem = driver.findElement(By.xpath("//input[@class='_2zrpKA']"));
elem.sendKeys("emailid@domain.com");
//Password
WebElement elem2 = driver.findElement(By.xpath("//input[@class='_2zrpKA _3v41xv']"));
elem2.sendKeys("pass_word");
//Login Button
driver.findElement(By.xpath("//button[@class='_2AkmmA _1LctnI _7UHT_c']")).click();
System.out.println("Success");
//driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
Thread.sleep(5000);
//Click on Name
WebElement elem3 = driver.findElement(By.xpath("//div[@class='AsXM8z']/ul/li/a[@class='_1AHrFc _2k0gmP']"));
System.out.println("success");
Actions action = new Actions(driver);
action.moveToElement(elem3).build().perform();
driver.findElement(By.xpath("//div[@class='_1H5F__']/div/ul/li/ul/li/a[@class='_2k0gmP'][text()='Log Out']")).click();
如果这回答你的问题,请告诉我。