Selenium 2(WebDriver)にはisTextPresent
はありません
WebDriverを使用してページ上のテキストの存在を表明する正しい方法は何ですか?
私は通常、次のようなことをします。
assertEquals(driver.getPageSource().contains("sometext"), true);
assertTrue(driver.getPageSource().contains("sometext"));
ページソースには、検索テキストを壊して誤検知を引き起こす可能性のあるHTMLタグが含まれています。このソリューションは、SeleniumRCのisTextPresentAPIとよく似ていることがわかりました。
WebDriver driver = new FirefoxDriver(); //or some other driver
driver.findElement(By.tagName("body")).getText().contains("Some text to search")
getTextを実行してからcontainsを実行すると、パフォーマンスのトレードオフが発生します。より具体的なWebElementを使用して、検索ツリーを絞り込むことができます。
これは少し古いことは知っていますが、ここで良い答えを見つけました: Selenium 2.0 Webドライバー: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
または、WebElementのテキストコンテンツを実際に確認したい場合は、次のようにすることができます。
assertEquals(getMyWebElement().getText(), "Expected text");
WebDriverでJavaを使用する次のコードは、機能するはずです。
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]*$"));
Selenium2 Java JUnit4のisTextPresent(Selenium IDEコード)のコード
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"));
}
私は次の方法を書きました:
public boolean isTextPresent(String text){
try{
boolean b = driver.getPageSource().contains(text);
return b;
}
catch(Exception e){
return false;
}
}
上記のメソッドは次のように呼び出されます。
assertTrue(isTextPresent("some text"));
それはうまく機能しています。
Firefoxをターゲットブラウザとして使用して、テキストがRuby(初心者アプローチ)に存在するかどうかをテストします。
1)もちろん、次のようなSeleniumサーバーjarファイルをダウンロードして実行する必要があります。
Java - jar C:\Users\wmj\Downloads\Selenium-server-standalone-2.25.0.jar
2)Rubyをインストールし、そのbinフォルダーでコマンドを実行して追加のgemをインストールする必要があります。
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を実行します。
Ruby test-it.rb