Эквивалент isTextPresent Selenium 1 (Selenium RC) в Selenium 2 (WebDriver)

В Selenium 2 (WebDriver) нет isTextPresent

Как правильно подтвердить наличие текста на странице с помощью WebDriver?


person Thomas Vervik    schedule 09.10.2011    source источник


Ответы (8)


Обычно я делаю что-то вроде:

assertEquals(driver.getPageSource().contains("sometext"), true);

assertTrue(driver.getPageSource().contains("sometext"));
person Thomp    schedule 10.10.2011
comment
Это хорошее решение, но похоже, что это не точный эквивалент - посмотрите комментарии здесь: rostislav-matl.blogspot.com/2011/03/ - person Rostislav Matl; 21.10.2011

Исходный код страницы содержит теги HTML, которые могут нарушить текст вашего поиска и привести к ложным отрицательным результатам. Я обнаружил, что это решение работает так же, как isTextPresent API Selenium RC.

WebDriver driver = new FirefoxDriver(); //or some other driver
driver.findElement(By.tagName("body")).getText().contains("Some text to search")

выполнение getText, а затем contains приводит к снижению производительности. Возможно, вы захотите сузить дерево поиска, используя более конкретный WebElement.

person Ashwin Prabhu    schedule 18.05.2012

Я знаю, что это немного устарело, но я нашел здесь хороший ответ: Веб-драйвер Selenium 2.0: реализация isTextPresent

В Python это выглядит так:

def is_text_present(self, text):
    try: el = self.driver.find_element_by_tag_name("body")
    except NoSuchElementException, e: return False
    return text in el.text
person elynnaie    schedule 19.01.2012

Или, если вы действительно хотите проверить текстовое содержимое WebElement, вы можете сделать что-то вроде:

assertEquals(getMyWebElement().getText(), "Expected text");
person TedEd    schedule 01.03.2012

Java-код Selenium2 для isTextPresent (код Selenium IDE) в JUnit4

public boolean isTextPresent(String str)
{
    WebElement bodyElement = driver.findElement(By.tagName("body"));
    return bodyElement.getText().contains(str);
}

@Test
public void testText() throws Exception {
    assertTrue(isTextPresent("Some Text to search"));
}
person Zumnes    schedule 16.08.2012

Следующий код, использующий Java в WebDriver, должен работать:

assertTrue(driver.getPageSource().contains("Welcome Ripon Al Wasim"));
assertTrue(driver.findElement(By.id("widget_205_after_login")).getText().matches("^[\\s\\S]*Welcome ripon[\\s\\S]*$"));
person Ripon Al Wasim    schedule 21.11.2012

Я написал следующий метод:

public boolean isTextPresent(String text){
        try{
            boolean b = driver.getPageSource().contains(text);
            return b;
        }
        catch(Exception e){
            return false;
        }
    }

Вышеупомянутый метод вызывается, как показано ниже:

assertTrue(isTextPresent("some text"));

Это работает хорошо.

person Ripon Al Wasim    schedule 01.10.2012
comment
assertTrue (boolean) и другие методы утверждения взяты из JUnit? Я предполагаю, что это не стандартные пакеты Java. - person MKod; 08.01.2013
comment
Вам не кажется, что с driver.getPageSource().contains(text) возникнут проблемы с производительностью. Я думаю, что он будет искать весь текст исходной страницы. Если это единственный способ найти конкретный текст, то как вы объясните прошедшее время и производительность кода. Спасибо, что разместили такой хороший вопрос. - person MKod; 08.01.2013
comment
@MKod: я согласен с тобой. Это может привести к проблемам с производительностью, поскольку поиск выполняется по всему тексту страницы. Он должен найти альтернативный путь (ы). Думаю, WebDriver будет улучшаться день ото дня. - person Ripon Al Wasim; 09.01.2013
comment
MKod: я использовал assertTrue(boolean) из TestNG. Вы также можете использовать JUnit, без проблем - person Ripon Al Wasim; 09.01.2013

Проверка наличия текста в Ruby (подход для начинающих) с использованием Firefox в качестве целевого браузера.

1) Вам, конечно, нужно загрузить и запустить файл jar сервера selenium с чем-то вроде:

java - jar C:\Users\wmj\Downloads\selenium-server-standalone-2.25.0.jar

2) Вам нужно установить ruby ​​и в его папке bin выполнить команды для установки дополнительных гемов:

gem install selenium-webdriver
gem install test-unit

3) создайте файл test-it.rb, содержащий:

require "selenium-webdriver"
require "test/unit"

class TestIt < Test::Unit::TestCase

    def setup
        @driver = Selenium::WebDriver.for :firefox
        @base_url = "http://www.yoursitehere.com"
        @driver.manage.timeouts.implicit_wait = 30
        @verification_errors = []
        @wait = Selenium::WebDriver::Wait.new :timeout => 10
    end


    def teardown
        @driver.quit
        assert_equal [], @verification_errors
    end

    def element_present?(how, what)
        @driver.find_element(how, what)
        true
        rescue Selenium::WebDriver::Error::NoSuchElementError
        false
    end

    def verify(&blk)
        yield
        rescue Test::Unit::AssertionFailedError => ex
        @verification_errors << ex
    end

    def test_simple

        @driver.get(@base_url + "/")
        # simulate a click on a span that is contained in a "a href" link 
        @driver.find_element(:css, "#linkLogin > span").click
        # we clear username textbox
        @driver.find_element(:id, "UserName").clear
        # we enter username
        @driver.find_element(:id, "UserName").send_keys "bozo"
        # we clear password
        @driver.find_element(:id, "Password").clear
        # we enter password
        @driver.find_element(:id, "Password").send_keys "123456"
        # we click on a button where its css is named as "btn"
        @driver.find_element(:css, "input.btn").click

        # you can wait for page to load, to check if text "My account" is present in body tag
        assert_nothing_raised do
            @wait.until { @driver.find_element(:tag_name=>"body").text.include? "My account" }
        end
        # or you can use direct assertion to check if text "My account" is present in body tag
        assert(@driver.find_element(:tag_name => "body").text.include?("My account"),"My account text check!")

        @driver.find_element(:css, "input.btn").click
    end
end

4) запустить рубин:

ruby test-it.rb
person Junior Mayhé    schedule 08.11.2012