جمعه , ۷ اردیبهشت ۱۴۰۳

آموزش Selenium-قسمت ششم: اولین Selenium Webdriver Script: نمونه کد جاوا(بخش دوم)

Selenium
Selenium

سوییچ کردن میان Pop-up Windowها

بر خلاف Selenium IDE، ابزار WebDriver اجازه می‌دهد پنجره‌های پاپ آپ مانند هشدارها(Alert) نمایش داده شوند. برای دسترسی به عناصر درون هشدار(مانند پیام حاوی آن)، ما باید از متد “()switchTo().alert” استفاده کنیم. در کد زیر ما از این متد برای دسترسی به جعبه هشدار(Alert Box) استفاده کرده‌ایم و سپس پیام خود را با استفاده از متد “()getText” بازیابی می‌نماییم. پس از آن جعبه هشدار را با استفاده از “()switchTo().alert().accept” به صورت اتوماتیک می‌بندیم.

ابتدا به اینجا بروید و به صورت دستی روی دکمه “!Go” کلیک کرده و متن پیام خود را مشاهده کنید.

Selenium Figure 5-18
Selenium Figure 5-18

اجازه دهید  WebDriver Code مربوطه را برای انجام این کار ببینیم:

package mypackage;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;

public class myclass {

    public static void main(String[] args) {
    	System.setProperty("webdriver.firefox.marionette","C:\\geckodriver.exe");
        WebDriver driver = new FirefoxDriver();
        String alertMessage = "";

        driver.get("http://jsbin.com/usidix/1");
        driver.findElement(By.cssSelector("input[value=\"Go!\"]")).click();
        alertMessage = driver.switchTo().alert().getText();
        driver.switchTo().alert().accept();
       
        System.out.println(alertMessage);
        driver.quit();
       
    }
}

در کنسول Eclipse، به پیام هشدار چاپ شده دقت کنید:

Selenium Figure 5-19
Selenium Figure 5-19

Waitها

در اینجا دو نوع Wait وجود دارد.

  • Wait ضمنی(Implicit): برای تنظیم زمان انتظار(Wait) پیشفرض در طول برنامه استفاده می‌شود.
  • Wait صریح(Explicit): صرفا برای تنظیم زمان انتظار(Wait) برای یک نمونه خاص استفاده می‌شود.

Wait ضمنی

  • برای کد کردن(کدنویسی) به نسبت Explicit Wait ساده‌تر است
  • معمولا در قمست instantiation مربوط به کد، اعلام می‌شود
  • فقط به Import کردن یک Package اضافی نیاز دارید

برای آغاز استفاده از Wait ضمنی، باید این Package را به کد خود Import کنید.

image0381

سپس در بخش Instantiation از کد خود، این را Add کنید:

Selenium Figure 5-20
Selenium Figure 5-20

Wait صریح

Waitهای صریح با استفاده از کلاس‌های WebDriverWait و ExpectedCondition انجام می‌شوند. برای مثال زیر، ما باید برای عنصری که id آن “username” است به مدت ۱۰ ثانیه صبر کنیم تا قبل از ادامه حرکت به سمت فرمان بعدی، قابل مشاهده شود. در اینجا سه مرحله وجود دارد.

مرحله ۱

این دو Package را Import نمایید:

Selenium Figure 5-21
Selenium Figure 5-21

مرحله ۲

یک متغیر WebDriverWait اعلام نمایید. در این مثال، ما از “myWaitVar” به عنوان نام متغیر استفاده خواهیم کرد.

Selenium Figure 5-22
Selenium Figure 5-22

مرحله ۳

روی قسمت‌هایی که نیاز به Wait صریح دارید، از MyWaitVar با ExpectedConditions استفاده کنید. در این مورد، ما از Wait صریح روی ورودی “username” استفاده کردیم.

Selenium Figure 5-23
Selenium Figure 5-23

Conditionها

متدهای زیر در عملیات‌های مشروط(Conditional) و حلقوی(Looping) استفاده می‌شوند:

  • ()isEnable زمانی استفاده می‌شود که شما می‌خواهید قبل از اجرای یک Command(دستور)، Verify کنید که آیا یک عنصر معین فعال است یا خیر.
Selenium Figure 5-24
Selenium Figure 5-24
  • ()isDisplayed زمانی استفاده می‌شود که شما می‌خواهید قبل از اجرای یک Command(دستور)، Verify کنید که آیا یک عنصر معین نمایش داده شده است یا خیر.
Selenium Figure 5-25
Selenium Figure 5-25
  • ()isSelected زمانی استفاده می‌شود که شما می‌خواهید Verify کنید که آیا یک چکباکس معین، رادیوباتن معین، یا آپشن موجود در یک دراپ‌باکس انتخاب شده است یا خیر. این روی دیگر عناصر کار نمی‌کند.
Selenium Figure 5-26
Selenium Figure 5-26

استفاده از Expected Conditionها

کلاس ExpectedConditionها مجموعه‌ای گسترده‌تر از Conditionها را فراهم می‌کند که می‌توانید از آن در ترکیب با متد ()until در WebDriverWait استفاده نمایید.

در زیر برخی از رایج‌ترین متدهای ExpectedConditions ارائه شده‌اند.

  • ()alertIsPresent: تا زمانیکه یک Alert Box نمایش داده شود منتظر می‌ماند
Selenium Figure 5-27
Selenium Figure 5-27
  • ()elementToBeClickable: تا زمانیکه یک عنصر مشاهده‌پذیر، در همان زمان فعال شود، منتظر می‌ماند. نمونه کد زیر، قبل از Assign کردن عنصری با “id=”username به عنوان متغیر WebElement با نام و مقدار “txtUserName”، تا زمانیکه عنصر مذبور مشاهده‌پذیر شده و فعال شود صبر می‌کند.
Selenium Figure 5-28
Selenium Figure 5-28
  • ()frameToBeAvailableAndSwitchToIt: تا زمانیکه Frame ارائه شده در دسترس باشد، منتظر مانده و سپس به طور خودکار به آن سوییچ می‌کند.
Selenium Figure 5-29
Selenium Figure 5-29

Catch کردن Exceptionها

هنگام استفاده از ()isEnabled()، isDisplayed و ()isSelected، ابزار WebDriver فرض را بر این می‌گیرد که عنصر از قبل در صفحه وجود دارد. در غیر این صورت، یک NoSuchElementException را Throw می‌کند. برای اجتناب از این موضوع، ما باید از یک بلوک Try-Catch استفاده کنیم تا برنامه دچار وقفه(Interrupt) نشود.

WebElement txtbox_username = driver.findElement(By.id("username"));
try{
        if(txtbox_username.isEnabled()){
            txtbox_username.sendKeys("tutorial");
        }
    }

catch(NoSuchElementException nsee){
            System.out.println(nsee.toString());
 }

اگر از Explicit Wait استفاده کنید، نوع Exceptionای که باید Catch کنید، “TimeoutException” است.

Selenium Figure 5-30
Selenium Figure 5-30

خلاصه

  • برای شروع استفاده از WebDriver API، باید حداقل این دو Package را Import کنید.
    • *.org.openqa.selenium
    • org.openqa.selenium.firefox.FirefoxDriver
  • متد ()get با دستور “open” در Selenium IDE هم ارز است.
  • موقعیت‌یابی عناصر در WebDriver بوسیله استفاده از متد ()findElement انجام می‌شود.
  • موارد ذیل گزینه‌های موجود برای موقعیت‌یابی عناصر در WebDriver هستند:
    • By.className
    • By.cssSelector
    • By.id
    • By.linkText
    • By.name
    • By.partialLinkText
    • By.tagName
    • By.xpath
  • ()By.cssSelector امکان “contains” را پشتیبانی نمی‌کند.
  • شما می‌توانید یک عنصر را بوسیله WebElement class ایجاد نمایید.
  • کلیک روی یک عنصر با استفاده از متد ()click انجام می‌شود.
  • WebDriver دستورات مفید get را فراهم کرده است، که در زیر لیستی از آنها را می‌بینیم:
    • ()get
    • ()getTitle
    • ()getPageSource
    • ()getCurrentUrl
    • ()getText
  • WebDriver دستورات مفید navigation را فراهم کرده است، که در زیر لیستی از آنها را می‌بینیم:
    • ()navigate().forward
    • ()navigate().back
    • ()navigate().to
    • ()navigate().refresh
  • متدهای ()close و ()quit برای بستن پنجره‌های مرورگر استفاده می‌شوند. ()close برای بستن یک پنجره منفرد استفاده می‌شود؛ در حالیکه ()quit برای بستن تمام پنجره‌های مرتبط با پنجره والدی که WebDriver Object کنترل می‌کند به کار می‌آید.
  • متدهای ()switchTo().frame و ()switchTo().alert برای هدایت تمرکز WebDriver به ترتیب بر یک Frame یا Alert استفاده می‌شوند.
  • Waitهای ضمنی یا Implicit Waitها برای تنظیم زمان انتظار در طول برنامه استفاده می‌شوند، در حالی که Waitهای صریح یا Explicit Waitها فقط در بخش‌های خاص به کار گرفته می‌شوند.
  • شما می‌توانید در هنگام Verify کردن وضعیت یک عنصر از ()isEnabled()، isDisplayed()،isSelected و ترکیبی از متدهای WebDriverWait و ExpectedConditions استفاده نمایید. با این حال، آنها عنصر موجود را Verify نمی‌کنند.
  • زمانیکه ()isEnabled()، isDisplayed یا ()isSelected فراخوانی می‌شوند اگر عنصر موجود نباشد، WebDriver یک NoSuchElementException را Throw می‌کند.
  • زمانیکه متدهای WebDriverWait و ExpectedConditions فراخوانی می‌شوند اگر عنصر موجود نباشد، WebDriver یک TimeoutException را Throw خواهد کرد.

نکته

  • ()driver.get: این متد برای رفتن به وب‌سایتی خاص استفاده می‌شود، اما سابقه مرورگر و کوکی‌ها را نگه نمی‌دارد، بنابراین ما نمی‌توانیم از دکمه Forward و Backward استفاده کنیم، و اگر بر روی آن کلیک کنید، صفحه بارگذاری نمی‌شود.
  • ()driver.navigate: این متد برای رفتن به به وب‌سایتی خاص استفاده می‌شود، اما تاریخچه مرورگر و کوکی‌ها را نگه نمی‌دارد، بنابراین ما می‌توانیم در خلال کد کردن Test Caseها، از دکمه Forward و Backward برای حرکت بین صفحات استفاده کنیم.

متن

 

این یک آموزش طولانی مدت است. بنابراین قسمت‌های بعدی به محض آماده شدن علاوه بر اینکه در صفحه Home وبسایت اطلاعرسانی خواهد شد، به صورت دسته‌بندی شده از اینجا نیز در دسترس است.

ابوالفضل خواجه دیزجی

همچنین ببینید

Selenium

آموزش Selenium-قسمت هفدهم: Mouse Click Event و Keyboard Event و موضوع Action Class در Selenium WebDriver

در این بخش، ما رویداد کیبورد(Keyboard Event) و ماوس(Mouse Event) را در Selenium Webdriver آموزش …

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *