我试图点击下面提到的URL的"继续"按钮,但没有任何效果。我尝试了click((方法、Action类和JavaScriptExecute,但没有效果。下面是我的代码。
System.setProperty("webdriver.chrome.driver", System.getProperty("user.dir")+ "\src\main\resources\All_Drivers\chromedriver.exe");
WebDriver driver = new ChromeDriver();
driver.get("https://demo.midtrans.com/");
driver.manage().window().maximize();
driver.findElement(By.xpath("//a[@class='btn buy']")).click();
driver.findElement(By.xpath("//div[@class='cart-checkout']")).click();
WebElement frame = driver.findElement(By.id("snap-midtrans"));
driver.switchTo().frame(frame);
WebDriverWait wait = new WebDriverWait(driver,20);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//div[@class='text-button-main']/span")));
//Continue Button
WebElement elem = driver.findElement(By.xpath("//div[@class='text-button-main']/span"));
Actions action = new Actions(driver);
action.moveToElement(elem, 561, 526).click().build().perform();
driver.quit();
任何建议都将不胜感激。
由于所需元素位于<iframe>
中,因此要定位元素,您必须:
- 为所需的
frameToBeAvailableAndSwitchToIt()
诱导WebDriverWait - 诱导所需
elementToBeClickable()
的WebDriverWait -
您可以使用以下定位策略之一:
-
使用
CSS_SELECTOR
:new WebDriverWait(driver, 10).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.cssSelector("iframe#snap-midtrans"))); new WebDriverWait(driver, 10).until(ExpectedConditions.elementToBeClickable(By.cssSelector("div.text-button-main>span"))).click();
-
使用
XPATH
:new WebDriverWait(driver, 10).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.xpath("//iframe[@id='snap-midtrans']"))); new WebDriverWait(driver, 10).until(ExpectedConditions.elementToBeClickable(By.xpath("//span[text()='Continue']"))).click();
-
参考
你可以在中找到一些相关的讨论
- 在SeleniumWebdriverJava中,是否可以在不使用driver.switchTo((.frame("frameName"(的情况下切换到框架中的元素
- iframe下处理#文档的方法