繁体   English   中英

使用Selenium Java无法到达元素的xPath

[英]Cannot reach xPath of element using Selenium Java

我已经尝试了所有可能的方法,但是我找不到将密钥发送到以下信用卡字段的方法。 我认为这是因为需要首先单击该字段,但是我什至无法选择要单击的字段。 任何帮助是极大的赞赏。

网站链接: https : //givingday.northeastern.edu/pages/giving-page-2

点击字段之前的HTML:

<form accept-charset="UTF-8" action="javascript:void(0);" id="number-form" onsubmit="return false;">
<label for="card_number" class="visuallyhidden" id="number_label">Card Number</label>
<input type="text" pattern="[0-9]*" name="card_number" id="card_number" autocomplete="off" size="19" style="width: 100%; height: 2.5em; border-radius: 2px; border: 1px solid rgb(226, 226, 226); font-family: Arial, &quot;Helvetica Neue&quot;, Helvetica, sans-serif; padding-left: 5%; font-size: 14px; color: rgb(51, 51, 51); box-sizing: border-box;">

单击字段后的HTML:

<form accept-charset="UTF-8" action="javascript:void(0);" id="number-form" onsubmit="return false;" _lpchecked="1">
<label for="card_number" class="visuallyhidden" id="number_label">Card Number</label>
<input type="text" pattern="[0-9]*" name="card_number" id="card_number" autocomplete="off" size="19" style="width: 100%; height: 2.5em; border-radius: 2px; border: 1px solid rgb(226, 226, 226); font-family: Arial, &quot;Helvetica Neue&quot;, Helvetica, sans-serif; padding-left: 5%; font-size: 14px; color: rgb(51, 51, 51); box-sizing: border-box;">

<pre id="_h#2" style="white-space: pre-wrap; position: absolute; z-index: -9; visibility: hidden; display: block; font-family: Arial, &quot;Helvetica Neue&quot;, Helvetica, sans-serif; font-size: 14px; font-weight: 400; font-style: normal; text-transform: none; text-decoration: none solid rgb(51, 51, 51); letter-spacing: normal; word-spacing: 0px; line-height: normal; text-align: start; vertical-align: baseline; direction: ltr; width: 335px; height: 35px; margin: 0px; padding: 1px 1px 1px 16.75px; border-width: 1px; border-style: solid; overflow: auto; left: 0px; top: 0px;"><span>​</span> </pre>

根据我的假设并以最简单的最少可重复使用的方式,您将需要:

driver.switchTo.frame('spreedly-number-frame-9064')
driver.findElement(by.id('card_number')).click

信用卡CVV号字段位于iframe中 打开的提示上有2个iframe

建议 :您必须切换到iframe才能在其中执行一些操作。

这是解决您问题的代码: (Java + Selenium)

public class StackOverFlow {

    static WebDriver driver;
    static WebDriverWait wait;

    public static void main(String[] args) throws InterruptedException {


            System.setProperty("webdriver.chrome.driver", "F:\\Automation_Learning\\chromedriver.exe");
            driver = new ChromeDriver();
            driver.manage().window().maximize();
            wait = new WebDriverWait(driver, 40);
            driver.get("https://givingday.northeastern.edu/pages/giving-page-2");
            wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector(".campaign-tiles-content")));
            Thread.sleep(5000);
            scrollDown(driver, "scroll(0,700)");
            driver.findElement(By.xpath("//a[text()='Club Sports']/parent::div/following-sibling::div[@class='inline-b']/descendant::button")).click();
            wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector(".giving-form-billing")));
            wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//h3[text()='Archery']")));
            driver.findElement(By.xpath("//h3[text()='Archery']")).click();
            scrollDown(driver, "scroll(0,500)");
            wait.until(ExpectedConditions.elementToBeClickable(By.cssSelector("button[class$='secondary-color-background']")));
            driver.findElement(By.cssSelector("button[class$='secondary-color-background']")).click();
            wait.until(ExpectedConditions.visibilityOf(driver.findElement(By.cssSelector("span[class^='step_credit']"))));
            driver.findElement(By.name("first_name")).sendKeys("abc");
            driver.findElement(By.name("last_name")).sendKeys("xyz");
            driver.findElement(By.name("email")).sendKeys("abcxyz@hotmail.com");
            driver.switchTo().frame(driver.findElement(By.cssSelector("iframe[id^='spreedly-number-frame']")));
            Thread.sleep(5000);
            driver.findElement(By.xpath("//form[@id='number-form']/descendant::input")).sendKeys("12345678");
        }

        public static void scrollDown(WebDriver driver, String YoffSet){
            JavascriptExecutor jse = (JavascriptExecutor)driver;
            jse.executeScript(YoffSet);
        }
}

注意::我正面临互联网问题,这就是为什么我使用Thread.sleep(5000);

如果需要,也可以使用显式等待。

如果您对此有任何疑问,请告诉我。

试试这个希望对您有帮助的driver.switchTo()。frame(0); wait.until(ExpectedConditions.visibilityOfElementLocated((By.xpath(“ .//*[@ id ='card_number']”)))));; ele.sendKeys(“卡号”);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM