Page 1 of 1

Q - สอบถาม การทำงาน element แบบ ปกติ กับ ที่เติม s ต่างกันยังไง

Posted: 25/12/2018 4:35 pm
by ธวัชชัย แสนหาญ
Element กับ Elements
อยากทราบว่าการใช้งานของ element กับ elements ใช้งานต่างกันไหม
Screenshot (21).png
Screenshot (21).png (220.33 KiB) Viewed 369 times

Re: Q - สอบถาม การทำงาน element แบบ ปกติ กับ ที่เติม s ต่างกันยังไง

Posted: 25/12/2018 4:44 pm
by tatiya
โค้ดสร้าง จริงๆก็เหมือนกัน แต่ เวลารีเทิร์นกับ อันนึ่นน่าจะรีเทิร์น ตัวแปล list ออกมาครับ ถ้าใช้ที่มี s มันจะไม่มี แอททรีบิว พวก click ประมาณนี้ครับ
โค้ดสร้างของ find_element กับ find_elements

Code: Select all

def find_element(self, by=By.ID, value=None):
        """
        Find an element given a By strategy and locator. Prefer the find_element_by_* methods when
        possible.

        :Usage:
            element = driver.find_element(By.ID, 'foo')

        :rtype: WebElement
        """
        if self.w3c:
            if by == By.ID:
                by = By.CSS_SELECTOR
                value = '[id="%s"]' % value
            elif by == By.TAG_NAME:
                by = By.CSS_SELECTOR
            elif by == By.CLASS_NAME:
                by = By.CSS_SELECTOR
                value = ".%s" % value
            elif by == By.NAME:
                by = By.CSS_SELECTOR
                value = '[name="%s"]' % value
        return self.execute(Command.FIND_ELEMENT, {
            'using': by,
            'value': value})['value']

    def find_elements(self, by=By.ID, value=None):
        """
        Find elements given a By strategy and locator. Prefer the find_elements_by_* methods when
        possible.

        :Usage:
            elements = driver.find_elements(By.CLASS_NAME, 'foo')

        :rtype: list of WebElement
        """
        if self.w3c:
            if by == By.ID:
                by = By.CSS_SELECTOR
                value = '[id="%s"]' % value
            elif by == By.TAG_NAME:
                by = By.CSS_SELECTOR
            elif by == By.CLASS_NAME:
                by = By.CSS_SELECTOR
                value = ".%s" % value
            elif by == By.NAME:
                by = By.CSS_SELECTOR
                value = '[name="%s"]' % value

        # Return empty list if driver returns null
        # See https://github.com/SeleniumHQ/selenium/issues/4555
        return self.execute(Command.FIND_ELEMENTS, {
            'using': by,
            'value': value})['value'] or []
ว่าแต่ จะใช้ find_elements_by_ ไปเพื่อทำอะไรครับ

Re: Q - สอบถาม การทำงาน element แบบ ปกติ กับ ที่เติม s ต่างกันยังไง

Posted: 25/12/2018 4:54 pm
by ธวัชชัย แสนหาญ
ว่าแต่ จะใช้ find_elements_by_ ไปเพื่อทำอะไรครับ
ถามไว้เผื่อมันมีอะไรที่ดีกว่าตัว find_element_by_ธรรมดา

Re: Q - สอบถาม การทำงาน element แบบ ปกติ กับ ที่เติม s ต่างกันยังไง

Posted: 25/12/2018 5:27 pm
by tatiya
ก็นั้นแหละครับ ผมจะได้หาข้อมูลมาตอบได้ถูกประเด็น

find_elements_by_ คือ จะใช้เพื่อค้นหาองค์ประกอบหลายรายการ และวิธีนี่จะ return ค่ามาเป็น list อย่างตัวอย่างที่เอาให้ดูข้างต้น
find_element_by_ คือ จะใช้เพื่อค้นหาองค์ประกอบทีละรายการ

ตัวอย่างเช่น

Code: Select all

from selenium.webdriver.common.by import By

driver.find_element(By.XPATH, '//button[text()="Some text"]')
driver.find_elements(By.XPATH, '//button')