首页 文章

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

提问于
浏览
1

我的问题是如何执行click元素以从服务器响应中获取数据?算法:
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();

UPDATE

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

phone = webElement.getText();

webElement的状态:readyState_ =“loading”

1 回答

  • 0

    Steps taken :

    Code: 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());
                }
    
        }
    
        }
    

    试试这段代码,让我知道状态 .
    Note : 我正在使用chromeDriver实例来启动chrome浏览器 .
    如果您对此有疑问,请与我们联系 .

    Update

    您可以将此代码与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());
                }
    
        }
    
        }
    

相关问题