簡體   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