1

使用 Selenium for Java,我尝试自动设置 2 个元素 -Merchant integration version (v5/v6)https://stage.masterpassteststore.com/configurationMerchant Checkout ID (Sandbox-V7-STD-9CCBB)页面。

我已经解决了设置环境(Sandbox/Production),但仅此而已。

        // Setting the environment
        try {
            Select environments = new Select((new WebDriverWait(driver, 5).until(ExpectedConditions.elementToBeClickable(By.id("select_environment")))));

            environments.selectByVisibleText("Sandbox");

            System.out.println("Selected environment: " + environments.getFirstSelectedOption().getText());

            System.out.println("Number of selected environments: " + environments.getAllSelectedOptions().size());

            } catch ( Exception e ) {
            System.out.println("Setting the environment failed. " + e.getMessage());}

        driver.quit();
    }
}

欢迎来自聪明人的任何帮助。:)

“Dmitri T”的唯一一个建议以以下错误结尾:

在端口 37781 上启动 ChromeDriver 75.0.3770.140 (2d9f97485c7b07dc18a74666574f19176731995c-refs/branch-heads/3770@{#1155}) 仅允许本地连接。请保护 ChromeDriver 和相关测试框架使用的端口,防止恶意代码访问。Srp 23, 2019 12:57:04 ODP。org.openqa.selenium.remote.ProtocolHandshake createSession INFO:检测到的方言:W3C 环境选择成功:线程“main”中的沙盒异常 org.openqa.selenium.ElementClickInterceptedException:元素单击被拦截:元素 ... 在点不可单击(669 , 464)。其他元素将收到点击:...(会话信息:chrome=75.0.3770.80)构建信息:版本:'3.9.1',修订:'63f7b50',时间:'2018-02-07T22:42:22.379Z '系统信息:主机:'*', ip: '10.45.1.194', os.name: 'Windows 7', os.arch: 'amd64', os.version: '6.1', java.version: '1.8.0_221' 驱动信息: org. openqa.selenium.chrome.ChromeDriver Capabilities {acceptInsecureCerts: false, browserName: chrome, browserVersion: 75.0.3770.80, chrome: {chromedriverVersion: 75.0.3770.140 (2d9f97485c7b..., userDataDir: C:\Users*\AppDat...}, goog:chromeOptions: {debuggerAddress: localhost:55213}, javascriptEnabled: true, networkConnectionEnabled: false, pageLoadStrategy: normal, platform: XP, platformName: XP, proxy: Proxy(), setWindowRect: true, strictFileInteractability :false,超时:{implicit:0,pageLoad:300000,脚本:30000},unhandledPromptBehavior:dismiss and notify} 会话 ID:903a3ae8fe6f8d9e7260742bb2ffa419 在 sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 在 sun.reflect.NativeConstructorAccessorImpl.newInstance( NativeConstructorAccessorImpl.java:62) 在 sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 在 java.lang.reflect.Constructor.newInstance(Constructor.java:423) 在 org.openqa.selenium.remote.http.W3CHttpResponseCodec .createException(W3CHttpResponseCodec.java:187) 在 org.openqa.selenium.remote.http.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:122) 在 org.openqa.selenium.remote.http.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:49) 在 org.openqa.selenium.remote.HttpCommandExecutor。在 org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:601) 在 org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:601) 在 org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:83) 执行(HttpCommandExecutor.java:160) .openqa.selenium.remote.RemoteWebElement.execute(RemoteWebElement.java:279) 在 org.openqa.selenium.remote.RemoteWebElement.click(RemoteWebElement.java:83) 在 App.main(App.java:36)在 org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:601) 在 org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:601) 在 org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:83) 执行(HttpCommandExecutor.java:160) .openqa.selenium.remote.RemoteWebElement.execute(RemoteWebElement.java:279) 在 org.openqa.selenium.remote.RemoteWebElement.click(RemoteWebElement.java:83) 在 App.main(App.java:36)在 org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:601) 在 org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:601) 在 org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:83) 执行(HttpCommandExecutor.java:160) .openqa.selenium.remote.RemoteWebElement.execute(RemoteWebElement.java:279) 在 org.openqa.selenium.remote.RemoteWebElement.click(RemoteWebElement.java:83) 在 App.main(App.java:36)


4

1 回答 1

0

您尝试自动化的应用程序严重依赖AJAX ,因此您需要在任何地方使用显式等待 以确保元素存在/可点击/不被加载微调器等覆盖。

示例代码:

driver.get("https://stage.masterpassteststore.com/configuration");

WebDriverWait wait = new WebDriverWait(driver, 10);
wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//input[@value='v5']/parent::*"))).click(); // click v5
wait.until(ExpectedConditions.invisibilityOfElementLocated(By.xpath("//td/div[@class='loader']"))); // wait until loader hides
wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//div[contains(@title, 'checkout identifier')]"))).click(); //click the dropdown

List<WebElement> choices = new WebDriverWait(driver, 10) //get all options
        .until(ExpectedConditions
                .presenceOfAllElementsLocatedBy(By.xpath("//div[contains(@class,'row-inner')]")));

WebElement randomChoice = choices.get(new Random().nextInt(choices.size() - 1)); // get random option
randomChoice.click();

更多信息:如何使用 Selenium 测试使用 AJAX 技术的 Web 应用程序

于 2019-08-21T13:27:18.597 回答