我的代码首先登录PayPal,然后登录eBay并导航到付费页面,然后使用PayPal结账。最后的“继续”按钮我无法点击/提交。我试过xpath,id和class。我甚至尝试发送TAB 7x直到继续按钮,然后发送回车,但这不起作用。
我找到了这个讨论,但我不确定如何让它适合我。 PayPal Sandbox checkout 'continue button' - Unable to locate element: - C# WebDriver
//Chrome WebDriver specific
System.setProperty("webdriver.chrome.driver", "C:\\automation\\drivers\\chromedriver.exe");
WebDriver driver = new ChromeDriver();
driver.manage().window().maximize(); //maximise webpage
WebDriverWait wait = new WebDriverWait(driver, 20);
//navigate to Paypal
driver.get("https://www.paypal.com/uk/signin");
//wait 2.5s for the page to load
try {
Thread.sleep(2500);
}
catch (Exception e) {
e.printStackTrace();
}
WebElement paypalEmail = driver.findElement(By.id("email"));
paypalEmail.sendKeys("******");
//wait 2.5s for the page to load
try {
Thread.sleep(2500);
}
catch (Exception e) {
e.printStackTrace();
}
WebElement paypalSubmit = driver.findElement(By.id("btnNext"));
paypalSubmit.click();
String URL = ("https://www.paypal.com/uk/signin");
driver.get(URL);
WebElement form2 = driver.findElement(By.cssSelector(".main form"));
WebElement username = form2.findElement(By.id("password"));
username.sendKeys("******");
WebElement paypalSubmit2 = driver.findElement(By.id("btnLogin"));
paypalSubmit2.click();
//navigate to Ebay
driver.get("https://signin.ebay.co.uk/ws/eBayISAPI.dll?SignIn&ru=https%3A%2F%2Fwww.ebay.com%2F");
// Enter user name , password and click on Signin button
WebElement form = wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("#mainCnt #SignInForm")));
form.findElement(By.cssSelector("input[type=text][placeholder='Email or username']")).sendKeys("******");
form.findElement(By.cssSelector("input[type=password]")).sendKeys("******");
form.findElement(By.id("sgnBt")).click();
driver.get("http://cgi3.ebay.co.uk/ws/eBayISAPI.dll?OneTimePayPalPayment");
//WebElement Pay =
driver.findElement(By.xpath("//input[@value='Pay']")).click();
WebDriverWait wait2 = new WebDriverWait(driver, 15);
wait2.until(ExpectedConditions.elementToBeClickable(By.xpath("//*[@id=\"confirmButtonTop\"]")));
driver.findElement(By.xpath("//*[contains(@id,'confirmButtonTop')]")).click();
}
}
答案 0 :(得分:1)
根据您提供的截图,下列其中一项应该可以点击“继续”按钮:
方法1:
WebElement paypalSubmit = driver.findElement(By.xpath("//input[@data-test-id='continueButton']"));
paypalSubmit.click();
方法2:
By paypalButton=By.xpath("//input[@data-test-id='continueButton']"));
WebElement element=driver.findElement(paypalButton);
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("arguments[0].scrollIntoView(true);",element);
js.executeScript("arguments[0].click();", element);
如果您觉得按钮需要滚动到底部以便点击,请尝试第二种方法。
如果上面没有工作,可以使用另外一个xpath:
//input[@value='Continue' and @id='confirmButtonTop']
答案 1 :(得分:1)
根据我的经验,paypal喜欢使用iFrame。如果你的情况确实如此,这意味着除非你告诉webdriver切换帧上下文,否则无论你的xpath / css选择器如何,你都无法使用paypal表单。
您可以获取当前使用此代码加载的所有可用框架的列表:
String[] handles = driver.getWindowHandles()
您的实际页面将始终是返回的数组中的第0个索引。如果paypal是你唯一的iFrame,那么你可以定位第1个索引。这是一个可能的解决方案:
String mainPageHandle = handles[0];
String paypalHandle = handles[1];
driver.switchTo().window(paypalHandle);
// Do paypal interactions
driver.switchTo().window(mainPageHandle);
// Back to the main page
肯定有更强大的方法来处理这个问题,如果您的网页不幸有多个iFrame,那么您可能需要做更多工作来验证哪个句柄是哪个,例如测试是否包含您知道的元素的存在内。通常,帧每次都会以相同的顺序加载。作为解决此问题的黄金途径,这将让您进出iFrame来执行工作。
答案 2 :(得分:0)
有时传统的click()
不起作用。在这种情况下,请尝试使用Javascript Executor单击,如下所示。
确保导入此课程
org.openqa.selenium.JavascriptExecutor
并使用此代替click();
JavascriptExecutor executor = (JavascriptExecutor) driver;
executor.executeScript("arguments[0].click();", driver.findElement(By.xpath(“//input[@data-test-id='continueButton']”)));
试试这个并告诉我这是否适合您。