当前位置: 首页 > 知识库问答 >
问题:

无法点击Paypal按钮继续使用Selenium

顾赞
2023-03-14

我的代码首先将我登录到PayPal,然后登录到eBay并导航到“支付费用”页面,然后使用PayPal结账。最后一个“继续”按钮我无法单击/提交。我尝试了xpath、id和类。我甚至尝试发送TAB 7x,直到按下“继续”按钮,然后发送Enter,但没有成功。

我已经找到了这个讨论,但我不知道如何让它为我工作。PayPal沙箱签出“继续按钮”-无法定位元素:-C#网络驱动程序

    //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();
}
}

共有3个答案

乌鸿宝
2023-03-14

有时,传统的单击()不起作用。在这种情况下,请尝试使用Javascript执行器单击,如下所示。

确保导入该类

org.openqa.selenium.JavascriptExecutor

用这个代替单击();

JavascriptExecutor executor = (JavascriptExecutor) driver;
executor.executeScript("arguments[0].click();", driver.findElement(By.xpath(“//input[@data-test-id='continueButton']”)));

试试这个,让我知道这是否适合你。

柯建修
2023-03-14

根据我的经验,paypal喜欢使用iFrame。如果在您的情况下是这样的话,这意味着除非您告诉webdriver切换帧上下文,否则无论您的xpath/css选择器如何,paypal表单都将不可用。

您可以获得当前加载此代码的所有可用帧的列表:

String[] handles = driver.getWindowHandles()

实际页面将始终是返回数组中的第0个索引。如果贝宝是你唯一的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执行工作。

贺卜霸
2023-03-14

根据您给定的屏幕截图,单击“继续”按钮时,应使用以下选项之一:

方法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']
 类似资料:
  • 无法使用Selenium单击链接-WebDriver:Chrome:Win7 下面是我检查按钮时的代码: span class=“UI-Button-Text”>span class=“Button-Content”>继续 我试过以下几种方法,都行不通:

  • 我想做的就是选择下拉列表。 下拉列表示例 代码: 我已经尝试了很多不同的Xpaths HTML代码 单击我查看HTML示例1 看看例1和例2中的名字 单击我为超文本标记语言实例2 您会注意到 HTML 代码已更改为 我认为这是我面临的问题的一部分。真是卡住了。我也尝试过使用ChroPath 提前谢谢你! 更新: 评论要求提供超文本标记语言代码的更多细节 更新2(解决方案) 我错在这里。我没有提供足

  • 我已经环顾四周,但一直没有找到我想要的具体答案;希望有人能给我指明正确的方向。 我正在Visual Studio 2015中使用WebDriver 2.53自动完成贝宝结帐过程,使用C#对抗Firefox驱动程序。我进入贝宝的流量很好,能够通过沙箱环境登录。然而,当我在初始登录后到达确认屏幕时,我似乎无法选择继续按钮。 我的代码是:

  • 我试图点击下面xpath提供的按钮。它显示以下错误: cmd中。

  • 我是使用Appium和TestNg测试移动应用程序自动化的新手。我正在练习自动化amazon应用程序,应用程序已经成功启动,但当我尝试单击登录选项时,它得到了: “失败:login org.openqa.selenium.NosuChelementException:无法使用给定的搜索参数在页面上找到元素。(警告:服务器未提供任何stacktrace信息)命令持续时间或超时:0毫秒。”

  • 我试图用硒点击“下一页”按钮,但没有成功。我使用了正确的CSS选择器还是应该把它换成别的东西?