HtmlUnitDriver单击并等待重新加载元素

时间:2018-04-14 03:19:44

标签: java html selenium htmlunit-driver

我的问题是我如何执行点击元素以从服务器响应中获取数据? 算法:
1)点击div元素

<div class="contact-button link-phone {'path':'phone', 'id':'z8rpg', 'id_raw': '519183738'} atClickTracking contact-a" data-rel="phone"> 
    <i data-icon="phone"></i> 
    <strong class="xx-large"> TEXT1 </strong> 
</div>

2)向服务器发送请求
3)服务器发送带有修改文本的响应。 所以我需要获得修改后的文本(代码中的TEXT1)。我这样做了:

HtmlUnitDriver driver = new HtmlUnitDriver(BrowserVersion.CHROME);
        driver.get("https://www.olx.ua/obyavlenie/audi-a4-1998-IDzaH8c.html#c890172227;promoted");
        System.out.println("Title: " + driver.getTitle());
        WebElement webElement = driver.findElement
                (By.xpath("//*[@id=\"contact_methods\"]/li[2]/div"));
        webElement.click();
        Thread.sleep(3000);
        webElement = driver.findElement
                (By.xpath("//*[@id=\"contact_methods\"]/li[2]/div"));
        phone = webElement.getText();

更新

据我所知,从服务器div元素获取响应后重新加载,而不是整页。 我需要等到div元素重新加载完毕。 使用调试模式我注意到奇怪的事情。在这一行:

phone = webElement.getText();

webElement的状态:readyState_ =&#34; loading&#34;

1 个答案:

答案 0 :(得分:0)

采取的步骤:

  1. 导航至https://www.olx.ua/obyavlenie/audi-a4-1998-IDzaH8c.html#c890172227;promoted

  2. 单击屏幕右侧的Показать(span)。

  3. 我们点击它后会立即看到两个数字。
  4. 检索这两个数字并将其打印在控制台上。
  5. 代码:Java + Selenium

    public class Lesnov {
    
        static WebDriver driver;
        static WebDriverWait wait;
    
        public static void main(String[] args) throws InterruptedException {
             System.setProperty("webdriver.chrome.driver", "D:\\Automation\\chromedriver.exe");
                driver = new ChromeDriver();
                driver.manage().window().maximize();
                wait = new WebDriverWait(driver, 40);
                driver.get("https://www.olx.ua/obyavlenie/audi-a4-1998-IDzaH8c.html#c890172227;promoted");
                wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("div[class^='contact-button']")));
                wait.until(ExpectedConditions.elementToBeClickable(By.cssSelector("span[class='spoiler']")));
                driver.findElement(By.cssSelector("span[class='spoiler']")).click();
                wait.until(ExpectedConditions.presenceOfAllElementsLocatedBy(By.cssSelector("strong[class='xx-large']>span[class='block']")));
                List<WebElement> numbers = driver.findElements(By.cssSelector("strong[class='xx-large']>span[class='block']"));
                for(WebElement num : numbers){
                    System.out.println(num.getText());
                }
    
        }
    
        }       
    

    试用此代码并告诉我状态 注意:我正在使用chromeDriver实例启动Chrome浏览器 如果您对此有疑问,请与我们联系。

    更新

    您可以将此代码与htmlunitDriver一起使用;

    public class Lesnov {
    
        static WebDriver driver;
        static WebDriverWait wait;
    
        public static void main(String[] args) throws InterruptedException {
             System.setProperty("webdriver.chrome.driver", "D:\\Automation\\chromedriver.exe");
             WebDriver driver = new HtmlUnitDriver(BrowserVersion.CHROME ,true);
                driver.manage().window().maximize();
                wait = new WebDriverWait(driver, 40);
                driver.get("https://www.olx.ua/obyavlenie/audi-a4-1998-IDzaH8c.html#c890172227;promoted");
                wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("div[class^='contact-button']")));
                wait.until(ExpectedConditions.elementToBeClickable(By.cssSelector("span[class='spoiler']")));
                driver.findElement(By.cssSelector("span[class='spoiler']")).click();
                wait.until(ExpectedConditions.presenceOfAllElementsLocatedBy(By.cssSelector("strong[class='xx-large']>span[class='block']")));
                List<WebElement> numbers = driver.findElements(By.cssSelector("strong[class='xx-large']>span[class='block']"));
                for(WebElement num : numbers){
                    System.out.println(num.getText());
                }
    
        }
    
        }